#include <iostream>
#include "friend.pb.h"
#include "mprpcapplication.h"

int main(int argc, char** argv)
{
    // 整个程序启动后，想使用mprpc框架来享受rpc服务调用
    // 一定要先调用框架的初始化函数，只初始化一次
    MprpcApplication::Init(argc, argv);

    // 调用远程发布的rpc方法GetFriendList
    Joy::FriendServiceRpc_Stub stub(new MprpcChannel());
    // rpc方法的请求参数
    Joy::GetFriendListRequest request;
    request.set_userid(728);
    // rpc方法的响应
    Joy::GetFriendListResponse response;

    // RpcChannel->callMethod 集中来做所有rpc方法调用的参数序列化和网络发送
    MprpcController controller;
    stub.GetFriendList(&controller, &request, &response, nullptr); 

    // 读取rpc方法的响应结果
    if(controller.Failed()) // rpc方法调用失败
    {   
        std::cout << controller.ErrorText() << std::endl;
    }
    else
    {
        if(response.result().errcode() == 0)
        {
            std::cout << "rpc getFriendList success" << std::endl;
            int n = response.friendlist_size();
            for(int i = 0; i < n; ++i)
            {
                Joy::User user = response.friendlist(i);
                std::cout << "name: " << user.name();
                std::cout << " age: " << user.age();
                std::cout << " sex: " << user.sex() << std::endl;
            }
        }
        else
        {
            std::cout << "rpc getFriendList error: " << response.result().errmsg() << std::endl;
        }
    }

    return 0;
}